home *** CD-ROM | disk | FTP | other *** search
- /*
- * FileX © 1993-1994 bei Klaas Hermanns
- * © 2003 Pavel Fedin
- */
- /* Eigene Includes */
-
- #include "FileX.h"
- #include "FileXStructs.h"
- #include "FileXStrings.h"
- #include "FileXARexx.h"
-
- /* Prototypes */
-
- #include "allprotos.h"
- #include "FileXARexx_protos.h"
-
- /* LibraryBases */
-
- struct Library *CxBase;
- struct Library *KeymapBase;
- struct IntuitionBase *IntuitionBase;
- struct Library *GadToolsBase;
- struct Library *DiskfontBase;
- struct Library *AslBase;
- struct Library *RexxSysBase;
- struct ReqToolsBase *ReqToolsBase;
- struct GfxBase *GfxBase;
- struct IconBase *IconBase;
- struct Library *UtilityBase;
- /*struct Library *XpkBase;*/
- struct DosLibrary *DOSBase;
- struct Library *WorkbenchBase;
- struct Library *IFFParseBase;
- struct ExecBase *SysBase;
- struct LocaleBase *LocaleBase;
-
- char programname[256];
- extern void __saveds DoWindow(void); /* Prototype für Hauptschleifenfkt. */
- static char errorbuffer[256];
-
- struct MsgPort *WndPort; /* Port für alle IDCMP-Nachrichten */
- struct MsgPort *AppPort; /* AppPort für alle Windows */
-
- static WORD MoveStatusBalkenY, MoveStatusBalkenMaxOff, MoveStatusBalkenMinOff;
-
- struct DisplayData *AktuDD;
- struct DisplayInhalt *AktuDI;
-
- static struct List OldFileList = {
- ( struct Node * )&OldFileList.lh_Tail,
- 0,
- ( struct Node * )&OldFileList.lh_Head,
- 0,0
- };
- struct List FileList = {
- ( struct Node * )&FileList.lh_Tail,
- 0,
- ( struct Node * )&FileList.lh_Head,
- 0,0
- };
- struct List DisplayInhaltList = {
- ( struct Node * )&DisplayInhaltList.lh_Tail,
- 0,
- ( struct Node * )&DisplayInhaltList.lh_Head,
- 0,0
- };
-
- /*void Gibs( void )
- {
- struct FileData *FD;
- struct DisplayData *DD;
- struct DisplayInhalt *DI;
-
- FD = (struct FileData *)FileList.lh_Head;
-
- while( FD != ( struct FileData * )&FileList.lh_Tail )
- {
- Printf("FileData = %8lx >%s<\n", FD, FD->Name );
-
- DD = (struct DisplayData *)FD->DisplayList.lh_Head;
-
- while( DD != ( struct DisplayData * )&FD->DisplayList.lh_Tail )
- {
- Printf(" %8lx %8lx %8lx\n", DD, DD->FD, DD->DI );
- DD = ( struct DisplayData *)DD->Node.ln_Succ;
- }
-
- FD = ( struct FileData *)FD->Node.ln_Succ;
- }
-
- DI = (struct DisplayInhalt *)DisplayInhaltList.lh_Head;
-
- while( DI != ( struct DisplayInhalt * )&DisplayInhaltList.lh_Tail )
- {
- Printf("DisplayInhalt = %8lx\n", DI );
-
- DD = (struct DisplayData *)DI->DisplayList.lh_Head;
-
- while( DD != ( struct DisplayData * )&DI->DisplayList.lh_Tail )
- {
- Printf(" %8lx %8lx %8lx\n", DD, DD->FD, DD->DI );
- DD = ( struct DisplayData *)DD->Node.ln_Succ;
- }
-
- DI = ( struct DisplayInhalt *)DI->Node.ln_Succ;
- }
- }
- */
- #define SECRETNUMBER 4
- int secretpos = -1;
- char *secret[] =
- {
- "You have activated the secret mode!",
- /*"SWF3 C-Team mit Krisi und Anke!",*/
- /*"SUPERTRAMP ist genial!!",*/
- /*"M * A * S * H!",*/
- /*"Save the Whales!",*/
- /*"Rottach '91-'93!",*/
- /*"Zweifel Chips, kalte Schnitzel, Schlappen Baguette.",*/
- /*"Jack and Jill went up the hill!",*/
- "Fish don't like milk!",
- "We do not burn, we shine!",
- "Dreadlock holiday!",
- "Even the trees had been a bad move...",
- };
-
- long ElementZahl( struct List *l )
- {
- struct Node *n;
- long a = 0;
-
- n = l->lh_Head;
-
- while( n != ( struct Node * )&l->lh_Tail )
- {
- a++;
-
- n = n->ln_Succ;
- }
-
- return( a );
- }
-
- /*
- * ChecksumCorrect()
- *
- * Prüft die Checksumme eines Keys.
- * -1 => Kein Key vorhanden.
- * 1 => Checksumme ok.
- * 0 => Checksumme falsch!
- */
- /* Removed by Pavel Fedin
- static long ChecksumCorrect( void )
- {
- ULONG realchecksumme = 0xdead;
- int k;
-
- if( regname[0] == 0 ) return( -1 );
-
- for(k = 0; k < strlen(regname); k++)
- {
- realchecksumme += regname[ k ] << 4;
- realchecksumme ^= regname[ k ] << 24;
- }
-
- realchecksumme ^= regnum;
-
- if( realchecksumme == checksumme )
- return( 1 );
- else
- return( 0 );
- }
-
- static BOOL LoadKeyFile( char *KeyFileName )
- {
- BPTR fh;
- BOOL Success = FALSE;
-
- if( fh = Open( KeyFileName, MODE_OLDFILE ))
- {
- static UBYTE Key[256];
- LONG KeyLaenge, namelaenge, k;
- UBYTE *ptr;
-
- KeyLaenge = Read( fh, Key, 256 );
-
- ptr = Key + 4;
-
- for( k = 0; *ptr != 0xa5; k++ )
- {
- regname[ k ] = *ptr ^ 0xa5;
- ptr += 3;
- }
-
- regname[ namelaenge = k ] = 0;
-
- regnum = 0;
- regnum += Key[ KeyLaenge - 8 ] << 24;
- regnum += Key[ KeyLaenge - 6 ] << 16;
- regnum += Key[ KeyLaenge - 3 ] << 8;
- regnum += Key[ KeyLaenge - 1 ];
- regnum ^= 0x11223344;
-
- checksumme = 0;
- checksumme += Key[ KeyLaenge - 7 ] << 16;
- checksumme += Key[ KeyLaenge - 5 ] << 24;
- checksumme += Key[ KeyLaenge - 4 ] << 8;
- checksumme += Key[ KeyLaenge - 2 ];
-
- Close( fh );
-
- Success = TRUE;
- }
-
- return( Success );
- }*/
-
- BOOL QuitView( long Typ, struct DisplayData *DD )
- {
- long z;
-
- /* Falls wir im Grabmemorymodus sind, keine Sicherheitsabfrage */
-
- if( DD->FD->Typ == FD_GRAB )
- return( TRUE );
-
- z = ElementZahl( &DD->FD->DisplayList );
-
- if(( z != 1) || (( z == 1 ) && ( QuitRequester( Typ, DD ))))
- return( TRUE );
- else
- return( FALSE );
- }
-
- BOOL QuitRequester( long Typ, APTR Zeiger )
- {
- struct FileData *FD, *OneFD = NULL;
- struct DisplayInhalt *DI;
- struct DisplayData *DD;
- long Changes = 0;
- long Anzahl = 0;
-
- switch( Typ )
- {
- case 0:
- FD = (struct FileData *)FileList.lh_Head;
-
- while( FD != ( struct FileData * )&FileList.lh_Tail )
- {
- if( FD->Typ == FD_FILE )
- {
- Changes += FD->FullChanges + FD->Changes + FD->RedoChanges;
-
- if( Changes ) Anzahl++;
-
- OneFD = FD;
- }
-
- FD = ( struct FileData *)FD->Node.ln_Succ;
- }
- break;
-
- case 1:
- DI = ( struct DisplayInhalt * )Zeiger;
- FD = (struct FileData *)FileList.lh_Head;
-
- while( FD != ( struct FileData * )&FileList.lh_Tail )
- {
- struct DisplayData *DD;
- BOOL Found = FALSE;
-
- DD = GetDDFromFD( FD->DisplayList.lh_Head );
-
- while( DD != GetDDFromFD( &FD->DisplayList.lh_Tail ))
- {
- if( DD->DI == DI )
- {
- Found = TRUE;
- break;
- }
- DD = GetDDFromFD( DD->FNode.ln_Succ );
- }
-
- if( Found && ( FD->Typ == FD_FILE ))
- {
- Changes += FD->FullChanges + FD->Changes + FD->RedoChanges;
-
- if( Changes ) Anzahl++;
-
- OneFD = FD;
- }
-
- FD = ( struct FileData *)FD->Node.ln_Succ;
- }
- break;
-
- case 2:
- case 3:
- case 4:
- case 5:
- DD = ( struct DisplayData * )Zeiger;
-
- Anzahl = 1;
- Changes = DD->FD->FullChanges + DD->FD->Changes + DD->FD->RedoChanges;
- OneFD = DD->FD;
- break;
- }
-
- if( Changes )
- {
- char ReqText[256];
-
- if( Anzahl == 1 )
- strcpy( ReqText, GetStr( MSG_INFO_GLOBAL_CHANGESTOFILE ));
- else
- strcpy( ReqText, GetStr( MSG_INFO_GLOBAL_CHANGESTOFILES ));
-
- switch( Typ )
- {
- case 0:
- strcat( ReqText, GetStr( MSG_INFO_GLOBAL_WANTTOQUIT ));
- break;
- case 1:
- strcat( ReqText, GetStr( MSG_INFO_GLOBAL_WANTTOCLOSEWINDOW ));
- break;
- case 2:
- strcat( ReqText, GetStr( MSG_INFO_GLOBAL_WANTTOCLOSEVIEW ));
- break;
- case 3:
- strcat( ReqText, GetStr( MSG_INFO_GLOBAL_WANTTOCLEAR ));
- break;
- case 4:
- strcat( ReqText, GetStr( MSG_INFO_GLOBAL_WANTTOGRAB ));
- break;
- case 5:
- strcat( ReqText, GetStr( MSG_INFO_GLOBAL_WANTTOOPEN ));
- break;
- }
-
- if( Anzahl == 1 )
- return(( BOOL )MyFullRequestNoLocale( ReqText, GetStr( MSG_GADGET_CHANGES ), Changes, (*FilePart( OneFD->Name )) ? (OneFD->Name) : ((UBYTE *)GetStr( MSG_INFO_GLOBAL_UNNAMED ))));
- else
- return(( BOOL )MyFullRequestNoLocale( ReqText, GetStr( MSG_GADGET_CHANGES ), Changes, Anzahl ));
- }
- else
- return( TRUE );
- }
-
- static void __saveds OldFileListCallBack( struct List *List, struct Node *node )
- {
- if( node )
- MyOpen( node->ln_Name, AktuDD );
- }
-
- static BOOL DoMenu( struct IntuiMessage *Msg )
- {
- UWORD Number;
- BOOL Stop = FALSE;
-
- Number = Msg->Code;
-
- while(( !Stop ) && ( Number != MENUNULL ))
- {
- struct MenuItem *mi;
-
- if(mi = ItemAddress(FileXMenus, Number))
- {
- switch(MENUNUM(Number))
- {
- case 0: /* Project */
- switch(ITEMNUM(Number))
- {
- case 0: /* New */
- ClearDDFile( AktuDD, FALSE );
- break;
- case 1: /* Open */
- if( QuitView( 5, AktuDD ))
- OpenFile( AktuDD );
- break;
- case 2: /* Open previous */
- if( !IsListEmpty( &OldFileList ))
- {
- if( QuitView( 5, AktuDD ))
- OpenListReq( &OldFileList, GetStr( MSG_WINDOWTITLE_PREVIOUSFILES ), &OldFileListCallBack );
- }
- else
- MyBeep();
- break;
- case 4: /* Save */
- SaveFile( AktuDD->FD );
- break;
- case 5: /* Save as */
- SaveAsFile( AktuDD->FD );
- break;
- case 7: /* View */
- switch(SUBNUM(Number))
- {
- case 0:
- NewDisplay( FALSE );
- break;
- case 1:
- NewDisplay( TRUE );
- break;
- case 3:
- ActivateNextDisplay();
- break;
- case 4:
- ActivatePreviousDisplay();
- break;
- case 6:
- MakeDisplayMax( AktuDD );
- break;
- case 8:
- MakeDisplayBigger( AktuDD );
- break;
- case 9:
- MakeDisplaySmaller( AktuDD );
- break;
- case 11:
- if( SaveFile( AktuDD->FD ))
- Stop = CloseAktuView();
- break;
- case 12:
- Stop = CloseAktuView();
- break;
- }
- break;
- case 8: /* Window */
- switch(SUBNUM(Number))
- {
- case 0:
- OpenNewWindow( FALSE );
- break;
- case 1:
- OpenNewWindow( TRUE );
- break;
- case 3:
- ActivateNextWindow();
- break;
- case 4:
- ActivatePreviousWindow();
- break;
- case 6:
- Stop = CloseAktuWindow();
- break;
- }
- break;
- case 10:
- if(QuitView( 4, AktuDD ))
- OpenGrabWindow();
- break;
- case 12: /* Print */
- PrintFile( AktuDD->FD );
- break;
- case 14: /* Iconify */
- mainflags |= MF_ICONIFY;
- break;
- case 16: /* About */
- About();
- break;
- case 18: /* Quit */
- if( QuitRequester( 0, 0 ))
- mainflags |= MF_ENDE;
- break;
- }
- break;
- case 1: /* Edit */
- switch(ITEMNUM(Number))
- {
- case 0: /* Mark Block */
- Mark( AktuDD );
- break;
- case 2: /* Cut Block */
- Cut(AktuDD);
- break;
- case 3: /* Copy Block */
- Copy(AktuDD);
- break;
- case 4: /* Fill */
- if(AktuDD->Flags&DD_MARK)
- OpenFillWindow();
- else
- DisplayLocaleText( MSG_INFO_GLOBAL_NOBLOCKMARKED );
- break;
- case 6: /* Paste */
- Paste(AktuDD);
- break;
- case 7: /* Insert */
- if( !( AktuDD->FD->Typ == FD_GRAB ))
- InsertBlock(AktuDD);
- else
- DisplayLocaleText( MSG_INFO_GLOBAL_INSERTINGNOTPOSSIBLEINGRABMODE );
- break;
- case 8:
- if( !( AktuDD->FD->Typ == FD_GRAB ))
- AppendBlock(AktuDD);
- else
- DisplayLocaleText( MSG_INFO_GLOBAL_APPENDINGNOTPOSSIBLEINGRABMODE );
- break;
- case 9: /* Print Block */
- PrintBlock();
- break;
- case 11:
- LoadBlockFR();
- break;
- case 12:
- SaveBlockFR();
- break;
- case 14:
- if( !Undo( AktuDD->FD ))
- DisplayLocaleText( MSG_INFO_GLOBAL_NOTHINGTOUNDO );
- break;
- case 15:
- if( !Redo( AktuDD->FD ))
- DisplayLocaleText( MSG_INFO_GLOBAL_NOTHINGTOREDO );
- break;
- case 17:
- if(( AktuDD->DisplayForm & DF_HEXASCII ) == DF_HEXASCII )
- WechselCursorBereich( AktuDD );
- break;
- }
- break;
- case 2: /* Search and Replace */
- switch(ITEMNUM(Number))
- {
- case 0:
- OpenSearchWindow( FALSE );
- break;
- case 1:
- OpenSearchWindow( TRUE );
- break;
- case 2:
- SearchNext(0,FALSE,FALSE,AktuDD);
- break;
- case 3:
- SearchNext(BM_BACKWARD,FALSE,FALSE,AktuDD);
- break;
- }
- break;
- case 3: /* Settings */
- switch(ITEMNUM(Number))
- {
- case 0:
- AdjustWindowSize( AktuDI );
- break;
-
- case 2: /* Display */
- switch(SUBNUM(Number))
- {
- case 1: /* only ASCII */
- SetDisplayTyp( 0, AktuDD );
- break;
- case 0: /* nur Buchtsaben und Zahlen */
- SetDisplayTyp( 1, AktuDD );
- break;
- case 2: /* all */
- SetDisplayTyp( 2, AktuDD );
- break;
- case 4: /* Userdefined */
- SetDisplayTyp( 3, AktuDD );
- break;
- case 5:
- LoadUserDisplaytypFR();
- break;
- }
- break;
- case 4: /* Select Font... */
- DoFontrequester( AktuDI );
- break;
- case 5: /* Screen */
- Stop = TRUE;
-
- switch(SUBNUM(Number))
- {
- case 1: /* Workbench */
- ReopenDisplay(SF_WORKBENCH);
- break;
- case 2: /* Public */
- OpenPubScreenListReq();
- break;
- case 3: /* Own Public */
- SetScreenOwnPublic();
- break;
- case 0: /* Default Public */
- ReopenDisplay(SF_DEFAULT_PUBLIC);
- break;
- }
- break;
- case 6: /* Palette... */
- Palette();
- break;
- case 8: /* Miscellaneous... */
- OpenMiscSettings();
- break;
- case 10: /* Load Settings... */
- LoadSettingsFR();
- Stop = TRUE;
- break;
- case 11: /* Save Settings */
- SaveSettingsDefault();
- break;
- case 12: /* Save Settings as...*/
- SaveSettingsFR();
- break;
- }
- break;
- case 4: /* Move */
- switch(ITEMNUM(Number))
- {
- case 0:
- if( AktuDD->FD->Len ) JumpToByte();
- else MyBeep();
- break;
- case 2:
- MarkLocation( 0, AktuDD );
- break;
- case 3:
- JumpToLocation( 0, AktuDD );
- break;
- }
- break;
- case 5: /* ARexx */
- switch(ITEMNUM(Number))
- {
- case 0:
- /* OpenCommandShell();*/
- break;
- case 2:
- ExecuteARexxCommand(0);
- break;
- case 3:
- SetARexxCommand(-1,0);
- Stop = TRUE;
- break;
- case 16:
- if( LoadARexxCommandsFR())
- Stop = TRUE;
- break;
- case 17:
- SaveARexxCommandsDefault();
- break;
- case 18:
- SaveARexxCommandsFR();
- break;
- default:
- if((ITEMNUM(Number)>=5)&&(ITEMNUM(Number)<=15))
- {
- ExecuteARexxCommandNumber(ITEMNUM(Number)-5);
- }
- break;
- }
- break;
-
- case 6: /* Misc */
- switch(ITEMNUM(Number))
- {
- case 0:
- OpenCalc();
- break;
- case 1:
- OpenClipConv();
- break;
- }
- break;
- }
- Number = mi->NextSelect;
- }
- else
- break;
- }
-
- return( Stop );
- }
-
- void DoFileXWindowMessage( void )
- {
- struct IntuiMessage *m, Msg;
- /* BOOL Stop = FALSE;*/
- struct DisplayInhalt *DI;
-
- while(m = ( struct IntuiMessage * )GetMsg( WndPort ))
- {
- DI = ( struct DisplayInhalt * )m->IDCMPWindow->UserData;
-
- /* while(( !Stop ) && ( !( mainflags & MF_ENDE )) && DI->Wnd && (m = ( struct IntuiMessage * )GetMsg( DI->Wnd->UserPort )))*/
- CopyMem((char *)m, (char *)&Msg, (long)sizeof(struct IntuiMessage));
-
- ReplyMsg(( struct Message * )m );
-
- /* PrintIntuiMessage( &Msg );*/
-
- switch( Msg.Class )
- {
- case IDCMP_ACTIVEWINDOW:
- MyActivateWindow( DI );
- break;
-
- case IDCMP_VANILLAKEY:
- switch( Msg.Code )
- {
- case 27:
- /*Stop = */CloseAktuWindow();
- break;
- default:
- if( AktuDD->FD->Len )
- {
- if( AktuDD->Flags & DD_HEX )
- {
- if(isxdigit(Msg.Code))
- {
- UBYTE oldwert=AktuDD->FD->Mem[AktuDD->CPos];
-
- if(!(AktuDD->Flags&DD_HEXEDITPOS))
- {
-
- AktuDD->FD->Mem[AktuDD->CPos]&=0xf;
- if(isdigit(Msg.Code))
- AktuDD->FD->Mem[AktuDD->CPos]+=(Msg.Code-'0') * 0x10;
- else
- AktuDD->FD->Mem[AktuDD->CPos]+=(tolower(Msg.Code)-'a'+10)*0x10;
-
- AddUndoCharHex(AktuDD->CPos,oldwert,AktuDD->FD->Mem[AktuDD->CPos],FALSE, AktuDD->FD );
-
- AllDisplayChar( AktuDD->FD, AktuDD->CPos );
- UpdateAllStatusZeilen( AktuDD->FD );
- AktuDD->Flags|=DD_HEXEDITPOS;
- }
- else
- {
- AktuDD->FD->Mem[AktuDD->CPos]&=0xf0;
- if(isdigit(Msg.Code))
- AktuDD->FD->Mem[AktuDD->CPos]+=(Msg.Code-'0');
- else
- AktuDD->FD->Mem[AktuDD->CPos]+=tolower(Msg.Code)-'a'+10;
-
- AddUndoCharHex(AktuDD->CPos,oldwert,AktuDD->FD->Mem[AktuDD->CPos],TRUE, AktuDD->FD );
-
- AllDisplayChar( AktuDD->FD, AktuDD->CPos );
- UpdateAllStatusZeilen( AktuDD->FD );
- MoveCursorX( 1, AktuDD );
- AktuDD->Flags&=~DD_HEXEDITPOS;
- }
- }
- else
- MyBeep();
- }
- else
- {
- AddUndoChar(AktuDD->CPos,AktuDD->FD->Mem[AktuDD->CPos],Msg.Code, AktuDD->FD );
- AktuDD->FD->Mem[AktuDD->CPos]=Msg.Code;
- AllDisplayChar( AktuDD->FD, AktuDD->CPos );
- UpdateAllStatusZeilen( AktuDD->FD );
- MoveCursorX( 1, AktuDD );
- }
- }
- else
- MyBeep();
- break;
- }
- break;
-
- case IDCMP_RAWKEY:
- /* Mögliche Qualifier: 0x08=CONTROL */
- /* 0x01=LSHIFT */
- /* 0x02=RSHIFT */
- /* 0x10=LALT */
- /* 0x20=RALT */
- /* 0x40=LAMIGA */
- /* 0x80=RAMIGA */
- if((Msg.Qualifier & 0x02) && (Msg.Qualifier & 0x08)) /* RShift Ctrl */
- switch(Msg.Code)
- {
- case CURSORDOWN:
- if( secretpos == -1 )
- secretpos = 0;
- else
- {
- secretpos++;
- if( secretpos >= SECRETNUMBER ) secretpos = 0;
- }
- SetStatusZeile( secret[ secretpos ], AktuDD );
- break;
- case CURSORUP:
- if( secretpos == -1 )
- secretpos = 0;
- else
- {
- secretpos--;
- if( secretpos < 0 ) secretpos = SECRETNUMBER - 1;
- }
- SetStatusZeile( secret[ secretpos ], AktuDD );
- break;
- }
- if(Msg.Qualifier & (0x10|0x20)) /* Alts */
- switch(Msg.Code)
- {
- case CURSORDOWN:
- MoveCursorY( altsprungweite, AktuDD );
- break;
- case CURSORUP:
- MoveCursorY( -altsprungweite, AktuDD );
- break;
- case CURSORRIGHT:
- SetCursorAltRight( AktuDD );
- break;
- case CURSORLEFT:
- SetCursorAltLeft( AktuDD );
- break;
- }
- else
- if(Msg.Qualifier & (0x01|0x02)) /* Shifts */
- switch(Msg.Code)
- {
- case CURSORDOWN:
- MoveCursorY( AktuDD->Zeilen - 1, AktuDD );
- break;
- case CURSORUP:
- MoveCursorY( 1 - AktuDD->Zeilen, AktuDD );
- break;
- case CURSORRIGHT:
- SetCursorEndOfLine( AktuDD );
- break;
- case CURSORLEFT:
- SetCursorStartOfLine( AktuDD );
- break;
- }
- else
- if(Msg.Qualifier & 0x08) /* Control */
- switch(Msg.Code)
- {
- case CURSORUP:
- SetCursorStart( AktuDD );
- break;
- case CURSORDOWN:
- SetCursorEnd( AktuDD );
- break;
- case CURSORRIGHT:
- SetCursorEndOfLine( AktuDD );
- break;
- case CURSORLEFT:
- SetCursorStartOfLine( AktuDD );
- break;
- }
- else
- switch(Msg.Code) /* Nichts */
- {
- case CURSORDOWN:
- MoveCursorY( 1, AktuDD );
- break;
- case CURSORUP:
- MoveCursorY( -1, AktuDD );
- break;
- case CURSORLEFT:
- MoveCursorX( -1, AktuDD );
- break;
- case CURSORRIGHT:
- MoveCursorX( 1, AktuDD );
- break;
- }
- break;
-
- case IDCMP_NEWSIZE:
- MakeDisplay( DI );
- RefreshWindowFrame( DI->Wnd );
- break;
-
- case IDCMP_CLOSEWINDOW:
- /*Stop = */CloseAktuWindow();
- break;
-
- case IDCMP_GADGETUP:
- #ifdef DEBUG
- PutStr("IDCMP_GADGETUP\n");
- #endif
- DisplayFromScroller( AktuDD );
- SetCursor( AktuDD->CPos, AktuDD );
- break;
-
- case IDCMP_GADGETDOWN:
- if(( struct DisplayData * )(( struct Gadget * )Msg.IAddress)->UserData != AktuDD )
- ChangeAktuView(( struct DisplayData * )(( struct Gadget * )Msg.IAddress)->UserData);
- break;
-
- case IDCMP_IDCMPUPDATE:
- #ifdef DEBUG
- PutStr("IDCMP_UPDATE\n");
- #endif
- DisplayFromScroller( AktuDD );
- SetCursor(AktuDD->CPos,AktuDD);
- break;
-
- case IDCMP_MOUSEMOVE:
- if( mainflags & MF_MOVESTATUSBALKEN )
- {
- WORD Off;
-
- Off = Msg.MouseY - ( AktuDD->sbby - BOXADDY / 2 );
-
- if( Off > 0 )
- Off = Off / DI->fhöhe;
- else
- Off = Off / DI->fhöhe - 1;
-
- if(( Off >= MoveStatusBalkenMinOff ) && ( Off <= MoveStatusBalkenMaxOff ))
- if( Off != MoveStatusBalkenY )
- {
- InvertStatusBalkenRahmen( AktuDD, MoveStatusBalkenY );
- InvertStatusBalkenRahmen( AktuDD, MoveStatusBalkenY = Off );
- }
- }
- else if(mainflags&MF_MOVECURSOR)
- {
- SetzeCursorMaus(Msg.MouseX,Msg.MouseY, AktuDD,DI);
- }
- break;
-
- case IDCMP_MOUSEBUTTONS:
- switch(Msg.Code)
- {
- case SELECTUP:
- AktuDI->Wnd->Flags &= ~WFLG_REPORTMOUSE;
- mainflags &= ~MF_LEFTMOUSEDOWN;
- mainflags &= ~MF_MOVECURSOR;
-
- if( mainflags & MF_MOVESTATUSBALKEN )
- {
- InvertStatusBalkenRahmen( AktuDD, MoveStatusBalkenY );
- mainflags &= ~MF_MOVESTATUSBALKEN;
- ModifyIDCMP( AktuDI->Wnd, AktuDI->Wnd->IDCMPFlags | ( IDCMP_RAWKEY | IDCMP_VANILLAKEY ));
-
- if( MoveStatusBalkenY != 0 )
- {
- struct DisplayData *DD;
-
- if( MoveStatusBalkenY > 0 )
- {
- ((struct DisplayData *)AktuDD->Node.ln_Pred)->Zeilen += MoveStatusBalkenY;
-
- DD = AktuDD;
- while( MoveStatusBalkenY )
- {
- if( DD->Zeilen - 1 > MoveStatusBalkenY )
- {
- DD->Zeilen -= MoveStatusBalkenY;
- MoveStatusBalkenY = 0;
- }
- else
- {
- MoveStatusBalkenY -= DD->Zeilen -1;
- DD->Zeilen = 1;
- }
-
- DD = ( struct DisplayData * )DD->Node.ln_Succ;
- }
- }
- else
- {
- MoveStatusBalkenY = -MoveStatusBalkenY;
-
- AktuDD->Zeilen += MoveStatusBalkenY;
-
- DD = ( struct DisplayData * )AktuDD->Node.ln_Pred;
- while( MoveStatusBalkenY )
- {
- if( DD->Zeilen - 1 > MoveStatusBalkenY )
- {
- DD->Zeilen -= MoveStatusBalkenY;
- MoveStatusBalkenY = 0;
- }
- else
- {
- MoveStatusBalkenY -= DD->Zeilen -1;
- DD->Zeilen = 1;
- }
-
- DD = ( struct DisplayData * )DD->Node.ln_Pred;
- }
- }
-
- MakeDisplay( AktuDI );
- }
- }
- break;
-
- case SELECTDOWN:
- AktuDI->Wnd->Flags |= WFLG_REPORTMOUSE;
- if( StatusBalkenHit(Msg.MouseX,Msg.MouseY,AktuDI))
- {
- if( AktuDD != ( struct DisplayData *)AktuDI->DisplayList.lh_Head )
- {
- MoveStatusBalkenY = Msg.MouseY - ( AktuDD->sbby - BOXADDY / 2 );
-
- if( MoveStatusBalkenY > 0 )
- MoveStatusBalkenY = MoveStatusBalkenY / AktuDI->fhöhe;
- else
- MoveStatusBalkenY = MoveStatusBalkenY / AktuDI->fhöhe - 1;
-
- mainflags |= MF_MOVESTATUSBALKEN;
-
- ModifyIDCMP( AktuDI->Wnd, AktuDI->Wnd->IDCMPFlags & ~( IDCMP_RAWKEY | IDCMP_VANILLAKEY ));
-
- {
- struct DisplayData *DD;
-
- DD = ( struct DisplayData * )AktuDD->Node.ln_Pred;
- MoveStatusBalkenMinOff = 0;
-
- while(DD != ( struct DisplayData *)&AktuDI->DisplayList.lh_Head )
- {
- MoveStatusBalkenMinOff -= DD->Zeilen - 1;
- DD = ( struct DisplayData * )DD->Node.ln_Pred;
- }
-
- DD = AktuDD;
- MoveStatusBalkenMaxOff = 0;
-
- while(DD != ( struct DisplayData *)&AktuDI->DisplayList.lh_Tail )
- {
- MoveStatusBalkenMaxOff += DD->Zeilen - 1;
- DD = ( struct DisplayData * )DD->Node.ln_Succ;
- }
- }
-
- if( MoveStatusBalkenY < MoveStatusBalkenMinOff )
- MoveStatusBalkenY = MoveStatusBalkenMinOff;
-
- if( MoveStatusBalkenY > MoveStatusBalkenMaxOff )
- MoveStatusBalkenY = MoveStatusBalkenMaxOff;
-
- InvertStatusBalkenRahmen( AktuDD, MoveStatusBalkenY );
- }
- }
- else
- {
- static ULONG LastSeconds = 0, LastMicros = 0;
- BOOL Doppel = FALSE;
- long OldCPos;
- struct DisplayData *OldDD;
-
- /* Doppelklick testen */
-
- if( DoubleClick( LastSeconds, LastMicros, Msg.Seconds, Msg.Micros ))
- Doppel = TRUE;
-
- LastSeconds = Msg.Seconds;
- LastMicros = Msg.Micros;
-
- mainflags|=MF_LEFTMOUSEDOWN;
-
- OldCPos = AktuDD->CPos;
- OldDD = AktuDD;
-
- /* Prüfen, ob Cursor überhaupt irgendwo hingesetzt wurde */
-
- if( SetzeCursorMaus( Msg.MouseX, Msg.MouseY, NULL, AktuDI ))
- {
- mainflags |= MF_MOVECURSOR;
-
- /* Falls Doppelclick und Cursor an gleicher Stelle */
-
- if( Doppel && ( AktuDD == OldDD ) && ( AktuDD->CPos == OldCPos ))
- {
- Mark( AktuDD );
- }
- }
- }
- break;
- }
- break;
-
- case IDCMP_INTUITICKS:
- if( mainflags & MF_MOVECURSOR )
- SetzeCursorMaus(Msg.MouseX,Msg.MouseY, AktuDD, AktuDI);
- break;
-
- case IDCMP_MENUPICK:
- if( mainflags & MF_MOVESTATUSBALKEN )
- {
- InvertStatusBalkenRahmen( AktuDD, MoveStatusBalkenY );
- mainflags &= ~MF_MOVESTATUSBALKEN;
- ModifyIDCMP( AktuDI->Wnd, AktuDI->Wnd->IDCMPFlags | ( IDCMP_RAWKEY | IDCMP_VANILLAKEY ));
- }
- /*Stop = */DoMenu( &Msg );
- break;
- }
- }
- }
-
- void DoAppWindowMessage( void )
- {
- struct AppMessage *appMsg;
- long k;
-
- while(appMsg=(struct AppMessage *)GetMsg(AppPort))
- {
- if( appMsg->am_Type == 7 ) /* Icon ins Fenster gezogen */
- {
- struct WBArg *argptr;
- BOOL fertig=FALSE;
-
- argptr=appMsg->am_ArgList;
-
- for(k=0;(k<appMsg->am_NumArgs) && fertig==FALSE;k++,argptr++)
- {
- if(strlen(argptr->wa_Name))
- {
- struct DisplayData *DD;
- UBYTE buffer[256];
-
- NameFromLock(argptr->wa_Lock,buffer,256);
-
- AddPart(buffer,argptr->wa_Name,256);
-
- MyActivateWindow(( struct DisplayInhalt * )appMsg->am_UserData );
- ActivateWindow( AktuDI->Wnd );
-
- if( DD = GetroffenerView(appMsg->am_MouseX,appMsg->am_MouseY,AktuDI))
- ChangeAktuView( DD );
-
- MyOpen(buffer, AktuDD);
-
- fertig=TRUE;
- }
- }
- }
-
- ReplyMsg((struct Message *)appMsg);
- }
- }
-
- void DoARexxMsg( void )
- {
- #ifdef AREXX
- ARexxDispatch( MyRexxHost );
- #endif
- }
-
- static struct RDArgs *cliargs;
- static struct MyArgs
- {
- UBYTE *ma_PublicScreenName;
- UBYTE *ma_ArexxPortName;
- UBYTE *ma_ArexxStartupScript;
- UBYTE *ma_SettingsName;
- UBYTE *ma_CommandsName;
- UBYTE *ma_LanguageName;
- UBYTE *ma_KeyName;
- LONG ma_Sync;
- UBYTE *ma_FileName;
- } myargs = { 0,0,0,0,0,0,0,0 };
-
- struct DiskObject *dob;
-
- char *ParseArgsAndAllocThings( void )
- {
- char *errorstring;
- char *String;
- long k;
-
- /* Locale Initialisierungen */
-
- String = 0;
-
- if( cliargs )
- {
- if( myargs.ma_LanguageName )
- {
- String = myargs.ma_LanguageName;
- }
- }
- else if( dob )
- {
- String = FindToolType( dob->do_ToolTypes, "LANGUAGE" );
- }
-
- if(LocaleBase)
- {
- if(!(Locale = OpenLocale( 0 )))
- {
- Fault(IoErr(),"FileX",errorbuffer, 256);
- return(errorbuffer);
- }
-
- Catalog = OpenCatalog(Locale, "FileX.catalog", OC_BuiltInLanguage, "english", OC_Version, 2,(String ? OC_Language : TAG_DONE ), String, TAG_DONE );
- }
-
- LocalizeAll();
-
-
- /* Allgemeine Initialisierung, unabhängig von Argumenten */
-
- strcpy( DefaultFontName, GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name );
- DefaultFontSize = GfxBase->DefaultFont->tf_YSize;
-
- Kick30 = ( SysBase->LibNode.lib_Version >= 39 );
-
- if( !( TextLineBuffer = AllocVec( TEXTLINEBUFFERLEN, MEMF_ANY)))
- return( GetStr( MSG_INFO_GLOBAL_CANTALLOCSOMEMEM ));
-
- /* Windowdefinitionsstrings allokieren */
-
- if(!(arexxcommandshellwindow = AllocVec(strlen(DEFAULT_COMMANDSHELLWINDOW) + 1,MEMF_ANY)))
- return(GetStr(MSG_INFO_GLOBAL_CANTALLOCSOMEMEM));
-
- strcpy(arexxcommandshellwindow,DEFAULT_COMMANDSHELLWINDOW);
-
- if(!(arexxcommandwindow = AllocVec(strlen(DEFAULT_COMMANDWINDOW) + 1,MEMF_ANY)))
- return(GetStr(MSG_INFO_GLOBAL_CANTALLOCSOMEMEM));
-
- strcpy(arexxcommandwindow,DEFAULT_COMMANDWINDOW);
-
- /* ARexxCommandos im Menu auf 'leer` setzen */
-
- for( k = 0; k < 10; k++ )
- SetEmptyARexxMenu( k );
-
- /* ReplyPort für Beantwortung eigener Msgs einrichten */
-
- if( !InitReplyPort())
- return( GetStr( MSG_INFO_GLOBAL_CANTCREATEMSGPORT ));
-
- /* Start Taskpriority bestimmen */
-
- oldtaskpri = taskpri = FindTask( NULL )->tc_Node.ln_Pri;
-
- InitSearchHistory();
-
- if( errorstring = AllocRequester())
- return( errorstring );
-
- /* Einen Windowport für alle IDCMP-Nachtrichten einrichten */
-
- if(WndPort=CreateMsgPort())
- {
- MyAddSignal( 1L << WndPort->mp_SigBit, &DoFileXWindowMessage);
- }
- /* AppMessagePort erstellen */
-
- if(AppPort=CreateMsgPort())
- {
- MyAddSignal( 1L << AppPort->mp_SigBit, &DoAppWindowMessage);
- }
-
-
- /* Settings laden. */
-
- if( cliargs )
- {
- if(myargs.ma_SettingsName)
- {
- if(!LoadSettings(myargs.ma_SettingsName,TRUE))LoadSettingsDefault();
- }
- else
- LoadSettingsDefault();
- }
- else if( dob )
- {
- if(String=FindToolType(dob->do_ToolTypes,"SETTINGS"))
- {
- if(!LoadSettings(String,TRUE))LoadSettingsDefault();
- }
- else
- LoadSettingsDefault();
- }
-
- /* Verwaltungsstruckturen init */
-
- AktuDI = AllocDI();
- AktuDD = AllocDD( AktuDI, AllocFD( FD_FILE ));
- AktuDI->AktuDD = AktuDD;
-
- /* Argumentparsing und entsprechende Initialisierungen */
-
- if( cliargs )
- {
- if(myargs.ma_CommandsName)
- {
- if(!LoadARexxCommands(myargs.ma_CommandsName))
- LoadARexxCommandsDefault();
- }
- else
- LoadARexxCommandsDefault();
- /* Removed by Pavel Fedin
- if(myargs.ma_KeyName)
- {
- if( !LoadKeyFile( myargs.ma_KeyName ))
- if( !LoadKeyFile( "PROGDIR:filex.key" ))
- if( !LoadKeyFile( "l:filex.key" ))
- LoadKeyFile( "s:filex.key" );
- }
- else
- if( !LoadKeyFile( "PROGDIR:filex.key" ))
- if( !LoadKeyFile( "l:filex.key" ))
- LoadKeyFile( "s:filex.key" );*/
-
- if( myargs.ma_PublicScreenName )
- {
- SetScreenTypePublic( myargs.ma_PublicScreenName );
- }
-
- if(myargs.ma_FileName)
- {
- MyOpen(myargs.ma_FileName, AktuDD);
- }
-
- if(myargs.ma_ArexxStartupScript)
- {
- if(startuparexxscript = AllocVec(strlen(myargs.ma_ArexxStartupScript)+1,MEMF_ANY))
- strcpy(startuparexxscript,myargs.ma_ArexxStartupScript);
- }
- }
- else if( dob )
- {
- if(String=FindToolType(dob->do_ToolTypes,"COMMANDS"))
- {
- if(!LoadARexxCommands(String))
- LoadARexxCommandsDefault();
- }
- else
- LoadARexxCommandsDefault();
- /* Removed by Pavel Fedin
- if(String=FindToolType(dob->do_ToolTypes,"KEY"))
- {
- if( !LoadKeyFile( String ))
- if( !LoadKeyFile( "PROGDIR:filex.key" ))
- if( !LoadKeyFile( "l:filex.key" ))
- LoadKeyFile( "s:filex.key" );
- }
- else
- if( !LoadKeyFile( "PROGDIR:filex.key" ))
- if( !LoadKeyFile( "l:filex.key" ))
- LoadKeyFile( "s:filex.key" );*/
-
- if(String=FindToolType(dob->do_ToolTypes,"PUBSCREENNAME"))
- {
- SetScreenTypePublic( myargs.ma_PublicScreenName );
- }
-
- if(String=FindToolType(dob->do_ToolTypes,"FILE"))
- {
- MyOpen(String,AktuDD);
- }
-
- if(String=FindToolType(dob->do_ToolTypes,"STARTUP"))
- {
- if(startuparexxscript = AllocVec(strlen(String)+1,MEMF_ANY))
- strcpy(startuparexxscript,String);
- }
- }
-
- #ifdef AREXX
- /* ARexx Setup */
-
- String = 0;
-
- if( cliargs )
- String = myargs.ma_ArexxPortName;
- else if( dob )
- String = FindToolType( dob->do_ToolTypes,"PORTNAME" );
-
- if( !( MyRexxHost = SetupARexxHost( String, NULL )))
- return(GetStr(MSG_INFO_AREXX_CANTSETUPAREXXHOST));
-
- MyAddSignal( 1L << MyRexxHost->port->mp_SigBit, &DoARexxMsg);
-
- /* ID von FileX anhand des ARexxportnamens bestimmen */
-
- {
- long k;
- for(k=0;(k<strlen(MyRexxHost->portname))&&(MyRexxHost->portname[k]!='.');k++);
-
- if(MyRexxHost->portname[k]=='.')
- {
- stcd_l(&MyRexxHost->portname[k+1],&filexid);
- }
- else
- filexid=0;
- }
-
- #else
-
- filexid = 0;
-
- #endif /* AREXX */
-
- /* Alles wieder freigeben */
-
- if( cliargs )
- FreeArgs( cliargs );
- else
- if( dob )
- FreeDiskObject(dob);
-
- return( NULL );
- }
-
- void __saveds NewTaskStart( void )
- {
- char *errorstring;
-
- if( errorstring = ParseArgsAndAllocThings())
- {
- MyRequestNoLocale( errorstring , 0 );
- }
- else
- {
- /* Removed registration stuff - Pavel Fedin
- if( 1 != ChecksumCorrect())
- Gedenken();*/
-
- DoWindow();
- }
- }
-
- /* ProcessCleanup(register __d1 BPTR SegList):
- *
- * Frees all resource the main process has allocated when
- * it exits.
- */
-
- STATIC VOID __saveds __asm
- ProcessCleanup(register __d1 BPTR SegList)
- {
- CloseAll();
-
- Forbid();
-
- UnLoadSeg(SegList);
-
- CloseLibs();
- }
-
- /* SegmentSplit(STRPTR Name,BYTE Pri,LONG StackSize,APTR Function):
- *
- * Create a new process from the current one.
- */
-
- STATIC struct Process *
- SegmentSplit(STRPTR Name,LONG StackSize,APTR Function)
- {
- struct Process *Child;
- struct CommandLineInterface *CLI;
-
- CLI = (struct CommandLineInterface *)BADDR(((struct Process *)SysBase -> ThisTask) -> pr_CLI);
-
- Forbid();
-
- Child = CreateNewProcTags(
- NP_CommandName, (LONG)"FileX",
- NP_Name, Name,
- NP_StackSize, StackSize,
- NP_Entry, Function,
- NP_Cli, TRUE,
- NP_ExitCode, ProcessCleanup,
- NP_ExitData, CLI->cli_Module,
- TAG_DONE);
-
- if(Child)
- CLI -> cli_Module = NULL;
-
- Permit();
-
- return(Child);
- }
-
- LONG main(void)
- {
- UBYTE *errorstring;
- struct Process *myproc;
-
- myproc = (struct Process *)SysBase -> ThisTask;
-
- if( myproc->pr_CLI )
- {
- /* Clistart */
-
- if(errorstring = OpenLibs())
- {
- if( ReqToolsBase || IntuitionBase )
- MyRequestNoLocale( errorstring , 0 );
- else
- Printf( "%s\n", errorstring );
-
- CloseLibs();
- return(RETURN_FAIL);
- }
-
- /* Programmnamen bestimmen */
-
- GetProgramName(programname,256);
-
- if(!(cliargs=ReadArgs("PUBSCREEN/K,PORTNAME/K,STARTUP/K,SETTINGS/K,COMMANDS/K,LANGUAGE/K,KEY/K,SYNC/S,FILE",(LONG *)&myargs,0)))
- {
- PrintFault( IoErr(), "FileX");
- CloseLibs();
- return(RETURN_FAIL);
- }
-
- if(!myargs.ma_Sync)
- {
- /* Create a new process from our code. */
-
- if(!SegmentSplit("FileX",16384,NewTaskStart))
- {
- Printf(GetStr(MSG_INFO_GLOBAL_FAILEDTOCREATEPROCESS));
-
- return(RETURN_FAIL);
- }
- }
- else
- {
- if( errorstring = ParseArgsAndAllocThings())
- MyRequestNoLocale( errorstring , 0 );
- else
- {
- /* Removed registration stuff - Pavel Fedin
- if( 1 != ChecksumCorrect())
- Gedenken();*/
-
- DoWindow();
- }
-
- CloseAll();
- CloseLibs();
- }
- }
- else
- {
- struct WBArg *wbarg;
- struct WBStartup *WBenchMsg;
- BPTR WBStartLock; /* Lock der auf das aktuelle Verzeichnis */
- /* beim Start von der Workbench zeigt */
-
- WaitPort(&myproc->pr_MsgPort);
- WBenchMsg = (struct WBStartup *)GetMsg(&myproc->pr_MsgPort);
-
- if(errorstring=OpenLibs())
- {
- if( ReqToolsBase || IntuitionBase )
- MyRequestNoLocale( errorstring , 0 );
- else
- Printf( "%s\n", errorstring );
-
- CloseLibs();
- return(RETURN_FAIL);
- }
-
- WBStartLock = CurrentDir(WBenchMsg->sm_ArgList->wa_Lock);
-
- wbarg=WBenchMsg->sm_ArgList;
-
- NameFromLock(wbarg->wa_Lock,programname,256);
- AddPart(programname,wbarg->wa_Name,256);
-
- dob = GetDiskObject(programname);
-
- if( errorstring = ParseArgsAndAllocThings())
- MyRequestNoLocale( errorstring , 0 );
- else
- {
- /* Removed registration stuff - Pavel Fedin
- if( 1 != ChecksumCorrect())
- Gedenken();*/
-
- if(WBenchMsg->sm_NumArgs > 1)
- {
- CurrentDir((WBenchMsg->sm_ArgList + 1)->wa_Lock);
-
- MyOpen((WBenchMsg->sm_ArgList + 1)->wa_Name, AktuDD);
- }
-
- DoWindow();
- }
-
- CurrentDir(WBStartLock);
-
- CloseAll();
- CloseLibs();
-
- Forbid();
-
- ReplyMsg((struct Message *)WBenchMsg);
- }
-
- return(RETURN_OK);
- }
-
- void About(void)
- {
-
- #ifdef __M68020
- #define CPUSTRING "68020"
- #else
- #define CPUSTRING "68000"
- #endif
-
- if( 1 == MyFullRequest( MSG_INFO_GLOBAL_ABOUTTEXT1, MSG_GADGET_ABOUT1, CPUSTRING ,VSTRING, DATE ))
- MyFullRequest( MSG_INFO_GLOBAL_ABOUTTEXT2, MSG_GADGET_ABOUT2, 0 );
- /* if( 1 == MyFullRequest( MSG_INFO_GLOBAL_ABOUTTEXT2, MSG_GADGET_ABOUT2, 0 ))
- {
- if( regname[0] )
- MyFullRequest( MSG_INFO_GLOBAL_REGISTERED, MSG_GADGET_REGISTERED, regnum, regname );
- else
- MyFullRequest( MSG_INFO_GLOBAL_NOTREGISTERED, MSG_GADGET_REGISTERED, 0 );
- }*/
- }
-
- void MyBeep(void)
- {
- DisplayBeep(Scr);
- }
-
- /*
- * BOOL LoadUserDisplaytyp(char *fullname)
- *
- * Öffnet einen FileRequester und läd einen userdefined Displaytyp ein
- */
-
- BOOL LoadUserDisplaytyp(char *fullname)
- {
- BPTR fh;
- BOOL Success=FALSE;
-
- if(fh=Open(fullname,MODE_OLDFILE))
- {
- Read(fh,displaytab[3],256);
-
- SetDisplayTyp(3, AktuDD );
-
- Success=TRUE;
-
- Close(fh);
- }
- else
- MyRequest( MSG_INFO_GLOBAL_CANTOPENFILE, ( ULONG )fullname );
-
- return(Success);
- }
-
- /*
- * BOOL LoadUserDisplaytypFR(void)
- *
- * Öffnet einen FileRequester und läd einen userdefined Displaytyp ein
- */
-
- BOOL LoadUserDisplaytypFR(void)
- {
- static UBYTE DisplaytypFullName[256];
-
- if( MyRequestFile( DisplaytypFullName, GetStr(MSG_WINDOWTITLE_SELECTDISPLAYFILE), 0, FALSE ))
- return( LoadUserDisplaytyp( DisplaytypFullName ));
- else
- return( FALSE );
- }
-
- /*
- * void SetScrollerGadget(void)
- *
- * Setz das Scrollergadget auf den richtigen Wert, d.h.
- * laenge+DD->Zeilen => Größe des Knobs
- * ScrollerPos => Position
- */
-
- void SetScrollerGadget( struct DisplayData *DD )
- {
- LONG Gesamtzeilen=( DD->FD->Len + DD->BPR - 1 ) / DD->BPR - DD->Zeilen;
-
- if(Gesamtzeilen<65000)
- SetGadgetAttrs(DD->PropGadget,DD->DI->Wnd,0,
- PGA_Total,(Gesamtzeilen < 0) ? 0 : Gesamtzeilen+DD->Zeilen,
- PGA_Top,(ULONG)DD->SPos,
- PGA_Visible,DD->Zeilen,
- TAG_DONE);
- else
- {
- SetGadgetAttrs(DD->PropGadget,DD->DI->Wnd,0,
- PGA_Total,65001,
- PGA_Top,(ULONG)DD->SPos*650/Gesamtzeilen*100,
- PGA_Visible,1,
- TAG_DONE);
- }
- }
-
- /*
- * long GetFileLaenge(BPTR fh)
- *
- * Ermittelt die Länge des Files mit der FileHandlestruktur fh
- * (Lange, aber schnelle Version)
- */
-
- long GetFileLaenge(BPTR fh)
- {
- struct FileInfoBlock *fib;
- LONG size=0;
-
- if(fib=(struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL))
- {
- ExamineFH(fh,fib);
-
- size=fib->fib_Size;
-
- FreeDosObject(DOS_FIB,fib);
- }
-
- return(size);
- }
-
- /*
- * long GetFileLaengeName(char *name)
- *
- * Ermittelt die Länge des Files mit dem Namen name
- * (Lange, aber schnelle Version)
- */
-
- long GetFileLaengeName(char *name)
- {
- struct FileInfoBlock *fib;
- LONG size=0;
-
- if(fib=(struct FileInfoBlock *)AllocDosObject(DOS_FIB,NULL))
- {
- BPTR FileLock;
-
- if(FileLock = Lock(name,ACCESS_READ))
- {
- Examine(FileLock,fib);
-
- size=fib->fib_Size;
-
- UnLock(FileLock);
- }
-
- FreeDosObject(DOS_FIB,fib);
- }
-
- return(size);
- }
-
- void FreeNLNode( struct Node *node )
- {
- if( node )
- {
- Remove( node );
- if( node ->ln_Name ) FreeMem(node->ln_Name,strlen(node->ln_Name)+1);
- FreeMem(node,sizeof(struct Node));
- }
- }
-
- void AddNLName( struct List *List, char *Name )
- {
- struct Node *node;
-
- if( node = AllocMem( sizeof( struct Node ), MEMF_CLEAR ))
- {
- if( node->ln_Name = AllocMem( strlen( Name ) + 1, MEMF_ANY ))
- strcpy( node->ln_Name, Name );
-
- AddTail( List, node );
- }
- }
-
- struct FileData *AllocFD( WORD Typ )
- {
- struct FileData *FD;
-
- if( FD = AllocVec( sizeof( struct FileData ), MEMF_CLEAR ))
- {
- AddTail( &FileList, &FD->Node );
-
- FD->Typ = Typ;
-
- NewList( &FD->DisplayList );
-
- if( FD->Name = AllocVec( 256, MEMF_CLEAR ))
- {
- if( AllocUndostructs( FD ))
- {
- int k;
-
- FD->LocationNumber = 1;
-
- for( k = 0; k < 10; k++ )
- FD->Locations[ k ] = -1;
- }
- else
- {
- FreeFD( FD );
- FD = 0;
- }
- }
- else
- {
- FreeFD( FD );
- FD = 0;
- }
- }
-
- return( FD );
- }
-
- void FreeFD( struct FileData *FD )
- {
- if( !FD )
- return;
-
- Remove( &FD->Node );
-
- if( FD->Name )
- {
- FreeVec( FD->Name );
- FD->Name = 0;
- }
-
- if( FD->Typ == FD_FILE )
- if( FD->Mem && FD->RLen )
- {
- FreeMem( FD->Mem, FD->RLen );
- FD->Mem = 0;
- FD->RLen = FD->Len = 0;
- }
-
- FreeUndostructs( FD );
- FreeVec( FD );
- }
-
- void FreeDD( struct DisplayData *DD )
- {
- if( !DD )
- return;
-
- if( DD->PropGadget )
- {
- if( DD->Wnd )
- RemoveGadget( DD->Wnd, DD->PropGadget );
-
- DisposeObject((APTR) DD->PropGadget );
- DD->PropGadget = 0;
- }
-
- if( ElementZahl( &DD->FD->DisplayList ) == 1 )
- FreeFD( DD->FD );
- else
- Remove( &DD->FNode );
-
- Remove( &DD->Node );
-
- FreeVec( DD );
- }
-
- struct DisplayData *AllocDD( struct DisplayInhalt *DI, struct FileData *FD )
- {
- struct DisplayData *DD;
-
- if( DD = AllocVec( sizeof( struct DisplayData ), MEMF_CLEAR ))
- {
- /* Defaultwerte setzen */
-
- DD->DisplayForm = DefaultDisplayForm;
- DD->DisplaySpaces = DefaultDisplaySpaces;
- DD->Zeilen = DefaultZeilen;
- DD->BPR = DefaultBPR;
- DD->DisplayTyp = DefaultDisplayTyp;
-
- /* andere Werte setzten */
-
- DD->Wnd = DI->Wnd;
- DD->FD = FD;
- DD->DI = DI;
-
- AddTail( &FD->DisplayList, &DD->FNode );
- AddTail( &DI->DisplayList, &DD->Node );
- }
-
- return( DD );
- }
-
- void FreeDI( struct DisplayInhalt *DI )
- {
- if( !DI )
- return;
-
- while( !IsListEmpty( &DI->DisplayList ))
- FreeDD(( struct DisplayData * )DI->DisplayList.lh_Head );
-
- Remove( &DI->Node );
-
- FreeVec( DI );
- }
-
- struct DisplayInhalt *AllocDI( void )
- {
- struct DisplayInhalt *DI;
-
- if( DI = AllocVec( sizeof( struct DisplayInhalt ), MEMF_CLEAR ))
- {
- /* Defaultfont setzen */
-
- MySetFontNameSize( DefaultFontName, DefaultFontSize, DI );
-
- DI->WindowTop = DefaultTop;
- DI->WindowLeft = DefaultLeft;
-
- AddTail( &DisplayInhaltList, &DI->Node );
- NewList( &DI->DisplayList );
- }
-
- return( DI );
- }
-
- BOOL MyOpen( char *Name, struct DisplayData *DD )
- {
- BPTR fh;
- BOOL Success=FALSE;
- struct FileData *FD;
-
- FD = DD->FD;
-
- if( !IsListEmpty( &OldFileList ))
- {
- if( !FindName( &OldFileList, Name ))
- AddNLName( &OldFileList, Name);
- }
- else
- AddNLName( &OldFileList, Name);
-
- /* File versuchen zu öffnen */
-
- fh = Open( Name , MODE_OLDFILE );
-
- if( ElementZahl( &FD->DisplayList ) == 1 )
- FreeFD( FD );
- else
- Remove( &DD->FNode );
-
- FD = AllocFD( FD_FILE );
- AddTail( &FD->DisplayList, &DD->FNode );
- DD->FD = FD;
-
- if( fh )
- {
- FD->RLen = FD->Len = GetFileLaenge( fh );
-
- /* Prüfen, ob das File einen Inhalt hat */
-
- if( FD->RLen )
- {
- if( FD->Mem = AllocMem( FD->Len, MEMF_ANY ))
- {
- if( FD->Len == Read( fh, FD->Mem, FD->RLen ))
- Success = TRUE;
- }
- else
- {
- MyRequest( MSG_INFO_GLOBAL_CANTALLOCMEM, FD->Len );
- FD->RLen = FD->Len = 0;
- }
- }
- }
-
- /* Falls File nicht geöffnet werden konnte oder Länge 0,
- * einen Dummyeintrag erzeugen */
-
- if( !fh || !FD->RLen )
- {
- /* Das File ist leer. Trotzdem ein Byte allokieren, */
- /* damit es eingeladen werden kann. */
-
- FD->Len = 0;
- FD->RLen = 1;
-
- if( FD->Mem = AllocMem( FD->RLen, MEMF_ANY ))
- {
- Success = TRUE;
- }
- else
- {
- MyRequest( MSG_INFO_GLOBAL_CANTALLOCMEM, FD->Len );
- FD->RLen = FD->Len = 0;
- }
- }
-
- strcpy( FD->Name, Name );
-
- /* Falls das Window geöffnet ist, alles neudarstellen */
-
- if( DD->DI->Wnd )
- {
- CursorOff( DD );
- DD->SPos = 0;
- SetScrollerGadget( DD );
- RedrawDisplay( DD );
- DD->CPos = 0;
- CursorOn( DD );
- UpdateStatusZeile( DD );
- }
-
- if( fh )
- Close( fh );
-
- if( !Success )
- ClearDDFile( DD, TRUE );
-
- return( Success );
- }
-
- BOOL FileLoaded( struct FileData *FD )
- {
- return(( BOOL )*FilePart( FD->Name ));
- }
-
- void PrintFile( struct FileData * FD )
- {
- struct DisplayData *FirstDD;
-
- FirstDD = GetDDFromFD( FD->DisplayList.lh_Head );
-
- MyPrint( FD->Mem, FD->Len, FirstDD->DisplayTyp, FirstDD->DI->Wnd );
- }
-
- BOOL SaveFile( struct FileData *FD )
- {
- if( *FilePart( FD->Name ))
- return( Save( FD ));
- else
- return( SaveAsFile( FD ));
- }
-
- BOOL OpenFile( struct DisplayData *DD )
- {
- char Buffer[ 256 ];
-
- strcpy( Buffer, DD->FD->Name );
-
- if( MyRequestFile( Buffer, GetStr(MSG_WINDOWTITLE_OPENFILE), 0, TRUE ))
- return( MyOpen( Buffer, DD ));
- else
- return( FALSE );
- }
-
- void ClearDDFile( struct DisplayData *DD, BOOL Force )
- {
- struct FileData *FD;
-
- if( Force || QuitView( 3, DD ))
- {
- FD = AllocFD( FD_FILE );
-
- strcpy( FD->Name, DD->FD->Name );
- *FilePart( FD->Name ) = 0;
-
- if( ElementZahl( &DD->FD->DisplayList ) == 1 )
- FreeFD( DD->FD );
- else
- Remove( &DD->FNode );
-
- DD->FD = FD;
- DD->CPos = 0;
-
- AddTail( &FD->DisplayList, &DD->FNode );
-
- if( DD->Wnd )
- {
- CursorOff( DD );
- UpdateStatusZeile( DD );
- SetScrollerGadget( DD );
- RedrawDisplay( DD );
- }
- }
- }
-
- BOOL SaveNewName( char *name, struct FileData *FD )
- {
- strcpy( FD->Name, name );
- return( Save( FD ));
- }
-
- BOOL Save( struct FileData *FD )
- {
- BPTR fh;
- BOOL Success=FALSE;
-
- /* Prüfen, ob File existiert. Falls ja, fragen, ob es überschrieben */
- /* werden soll */
-
- if(!(mainflags&MF_OVERWRITE))
- if(GetFileLaengeName(FD->Name))
- if(0 == MyFullRequest( MSG_INFO_GLOBAL_FILEALREADYEXISTS, MSG_GADGET_YESNO, ( ULONG )FD->Name ))
- return(Success);
-
- if(fh=Open(FD->Name,MODE_NEWFILE))
- {
- if(FD->Len!=Write(fh,FD->Mem,FD->Len))
- {
- /* Falls nicht vollständig geschrieben, löschen */
-
- Close( fh );
- MyRequest( MSG_INFO_GLOBAL_CANTSAVEFILE, ( ULONG )FD->Name );
- DeleteFile( FD->Name );
- }
- else
- {
- FD->FullChanges=FD->RedoChanges=FD->Changes=0;
- Close(fh);
-
- UpdateAllStatusZeilen( FD );
-
- Success=TRUE;
- }
- }
- else
- MyRequest( MSG_INFO_GLOBAL_CANTSAVEFILE, ( ULONG )FD->Name );
-
- return(Success);
- }
-
- void UpdateAllStatusZeilen( struct FileData *FD )
- {
- struct DisplayData *DD;
-
- /* Alle Statuszeilen des File neuzeichnen */
-
- DD = GetDDFromFD( FD->DisplayList.lh_Head );
-
- while( DD != GetDDFromFD( &FD->DisplayList.lh_Tail ))
- {
- UpdateStatusZeile( DD );
-
- DD = GetDDFromFD( DD->FNode.ln_Succ );
- }
- }
-
- BOOL SaveAsFile( struct FileData *FD )
- {
- if( MyRequestFile( FD->Name, GetStr(MSG_WINDOWTITLE_SAVEFILEAS ), 0, TRUE ))
- {
- return( Save( FD ));
- }
- else
- return( FALSE );
- }
-
- void DisplayFromScroller( struct DisplayData *DD )
- {
- ULONG newasp,cdisp,oldasp=DD->SPos,oldpos=DD->CPos;
-
- GetAttr(PGA_Top,(APTR)DD->PropGadget,&newasp);
-
- #ifdef DEBUG
- Printf("DD->BPR=%ld\n",(LONG)DD->BPR);
- Printf("newasp=%lu\n",newasp);
- #endif
- /* Sorry, i did not understand this - Pavel Fedin
- if((DD->FD->Len+DD->BPR-1)/DD->BPR-DD->Zeilen>=65000)
- newasp=newasp/650*(((DD->FD->Len+DD->BPR-1)/DD->BPR)-DD->Zeilen)/100;
-
- DD->CPos += ( newasp - oldasp ) * DD->BPR;
-
- The following is my version */
- cdisp=oldpos-oldasp*DD->BPR;
- DD->SPos=newasp;
- DD->CPos=newasp*DD->BPR+cdisp; // Äîäåëàòü ïåðåìåùåíèå êóðñîðà
-
- UpdateStatusZeile( DD );
- RedrawDisplay( DD );
- if (DD->Flags&DD_MARK)
- ChangeMark(oldpos,DD->CPos,oldasp,DD->SPos, DD);
- // else
- CursorOn(DD);
- }
-
- void Mark( struct DisplayData *DD )
- {
- if(DD->FD->Len!=0)
- if(DD->Flags&DD_MARK)
- {
- DD->Flags&=~DD_MARK;
- MarkOff( DD );
- CursorOn( DD );
- }
- else
- {
- DD->Flags|=DD_MARK;
- DD->MPos = DD->CPos;
-
- MarkOn( DD );
- }
- }
-
- void Palette(void)
- {
- if( ReqToolsBase )
- {
- if(rtPaletteRequest(GetStr(MSG_WINDOWTITLE_PALETTE),NULL,AktuDI->Wnd ? RT_Window : TAG_IGNORE, AktuDI->Wnd,TAG_DONE))
- {
- ULONG k,color;
-
- for(k=0;k<8;k++)
- {
- color=GetRGB4(Scr->ViewPort.ColorMap,k);
- ScreenColors[k].ColorIndex=k;
- ScreenColors[k].Red =(color >> 8)&0xf;
- ScreenColors[k].Green=(color >> 4)&0xf;
- ScreenColors[k].Blue =(color )&0xf;
- }
- }
- }
- else
- DisplayLocaleText( MSG_INFO_GLOBAL_REQTOOLSLIBRARYREQUIRED );
- }
-
- /*void PrintIntuiMessage( struct IntuiMessage *m )
- {
- char *classstring;
-
- if( m->Class == IDCMP_INTUITICKS ) return;
-
- switch( m->Class )
- {
- case IDCMP_SIZEVERIFY:
- classstring = "SIZEVERIFY";
- break;
- case IDCMP_NEWSIZE:
- classstring = "NEWSIZE";
- break;
- case IDCMP_REFRESHWINDOW:
- classstring = "REFRESHWINDOW";
- break;
- case IDCMP_MOUSEBUTTONS:
- classstring = "MOUSEBUTTONS";
- break;
- case IDCMP_MOUSEMOVE:
- classstring = "MOUSEMOVE";
- break;
- case IDCMP_GADGETDOWN:
- classstring = "GADGETDOWN";
- break;
- case IDCMP_GADGETUP:
- classstring = "GADGETUP";
- break;
- case IDCMP_REQSET:
- classstring = "REQSET";
- break;
- case IDCMP_MENUPICK:
- classstring = "MENUPICK";
- break;
- case IDCMP_CLOSEWINDOW:
- classstring = "CLOSEWINDOW";
- break;
- case IDCMP_RAWKEY:
- classstring = "RAWKEY";
- break;
- case IDCMP_REQVERIFY:
- classstring = "REQVERIFY";
- break;
- case IDCMP_REQCLEAR:
- classstring = "REQCLEAR";
- break;
- case IDCMP_MENUVERIFY:
- classstring = "MENUVERIFY";
- break;
- case IDCMP_NEWPREFS:
- classstring = "NEWPREFS";
- break;
- case IDCMP_DISKINSERTED:
- classstring = "DISKINSERTED";
- break;
- case IDCMP_DISKREMOVED:
- classstring = "DISKREMOVED";
- break;
- case IDCMP_WBENCHMESSAGE:
- classstring = "WBENCHMESSAGE";
- break;
- case IDCMP_ACTIVEWINDOW:
- classstring = "ACTIVEWINDOW";
- break;
- case IDCMP_INACTIVEWINDOW:
- classstring = "INACTIVEWINDOW";
- break;
- case IDCMP_DELTAMOVE:
- classstring = "DELTAMOVE";
- break;
- case IDCMP_VANILLAKEY:
- classstring = "VANILLAKEY";
- break;
- case IDCMP_INTUITICKS:
- classstring = "INTUITICKS";
- break;
- case IDCMP_IDCMPUPDATE:
- classstring = "IDCMPUPDATE";
- break;
- case IDCMP_MENUHELP:
- classstring = "MENUHELP";
- break;
- case IDCMP_CHANGEWINDOW:
- classstring = "CHANGEWINDOW";
- break;
- case IDCMP_GADGETHELP:
- classstring = "GADGETHELP";
- break;
- defaul:
- classstring = "UNKNOWN";
- }
- #ifdef DEBUG
- kprintf( "Class: %16s, Code: %4lx, Qual: %4lx, IAdr: %8lx\n",classstring, m->Code, m->Qualifier, m->IAddress);
- #endif
- }
- */
-
- static ULONG WaitSignals;
- #define MAXSIGNALS 20
- static void ( * SignalFunktionTab[ MAXSIGNALS ])( void );
- static ULONG Signals[ MAXSIGNALS ];
-
- void MyAddSignal( ULONG Signal, void ( * Funktion )())
- {
- long k;
-
- /* kprintf("MyAddSignal(%8lx,%8lx)\n", Signal, Funktion );*/
-
- WaitSignals |= Signal;
-
- for( k = 0; k < MAXSIGNALS; k++ )
- {
- if( SignalFunktionTab[ k ] == 0)
- {
- SignalFunktionTab[ k ] = Funktion;
- Signals[ k ] = Signal;
- break;
- }
- }
-
- /* if( k == MAXSIGNALS )*/
- /* kprintf("Warnung!: Kein Platz mehr in Signalliste\n");*/
- }
-
- void MyRemoveSignal( ULONG Signal )
- {
- long k;
- BOOL Found = FALSE;
-
- /* kprintf("MyRemoveSignal(%8lx)\n", Signal);*/
-
- WaitSignals &= ~Signal;
-
- for( k = 0; k < MAXSIGNALS; k++ )
- {
- if( Signals[ k ] == Signal )
- {
- SignalFunktionTab[ k ] = 0;
- Signals[ k ] = 0;
- if( !Found )
- Found = TRUE;
- /* else*/
- /* kprintf("Warnung!: Signal doppelt belegt!\n");*/
- }
- }
- }
-
- #define MAXWDWINDOWS 10
- static struct WindowData *OpenWD[ MAXWDWINDOWS ];
- static int OpenWDCount;
-
- void MyAddWindow( struct WindowData *wd )
- {
- int k;
-
- mainflags |= MF_WDWINDOWOPEN;
-
- for( k = 0; k < MAXWDWINDOWS; k++ )
- {
- if( !OpenWD[ k ])
- {
- OpenWD[ k ] = wd;
- break;
- }
- }
-
- OpenWDCount++;
- }
-
- void MyRemoveWindow( struct WindowData *wd )
- {
- int k;
-
- OpenWDCount--;
-
- if( !OpenWDCount )
- mainflags &= ~MF_WDWINDOWOPEN;
-
- for( k = 0; k < MAXWDWINDOWS; k++ )
- {
- if( OpenWD[ k ] == wd)
- {
- OpenWD[ k ] = NULL;
- break;
- }
- }
- }
-
- void CloseAllOpenWindows( void )
- {
- int k;
-
- for( k = 0; k < MAXWDWINDOWS; k++ )
- {
- if( OpenWD[ k ])
- {
- NewCloseAWindow( OpenWD[ k ]);
- OpenWD[ k ] = NULL;
- }
- }
-
- if( mainflags & MF_LISTREQ )
- CloseLR();
- }
-
- void __saveds DoWindow(void)
- {
- ULONG signals;
-
- /* Stimmt die Checksumme nicht? */
- /* Removed by Pavel Fedin
- if( 0 == ChecksumCorrect())
- {
- DisplayLocaleText( MSG_INFO_GLOBAL_PATCHED );
- }
- else
- {*/
- /* Display öffnen */
-
- if(OpenDisplay()) return;
-
- /* Ggf. ein Startarexxscript ausführen */
-
- #ifdef AREXX
- if(startuparexxscript)
- {
- BPTR fh;
-
- if(fh=Open(arexxcommandwindow,MODE_NEWFILE))
- SendRexxCommand(MyRexxHost,startuparexxscript,fh);
- FreeVec(startuparexxscript);
- }
- #endif
-
- while( !( mainflags & MF_ENDE ))
- {
- long k;
-
- /* kprintf("Wait(%8lx)", WaitSignals );*/
-
- signals = Wait( WaitSignals );
-
- /* kprintf(" = %8lx\n", signals );*/
-
- for( k = 0; k < MAXSIGNALS; k++ )
- {
- if( SignalFunktionTab[ k ] )
- if( signals & Signals[ k ])
- SignalFunktionTab[ k ]();
- }
-
- if( mainflags & MF_ICONIFY )
- {
- mainflags &= ~MF_ICONIFY;
-
- if( MakeIconify() == FALSE )
- DisplayLocaleText( MSG_INFO_GLOBAL_ICONIFYFAILED );
- }
- }
-
- if( mainflags & MF_CALC )
- CloseCalc();
- if( mainflags & MF_CLIPCONV )
- CloseClipConv();
-
- CloseCommandShell();
- CloseAllOpenWindows();
- // }
- }
-
- UBYTE *AllocRequester()
- {
- /* Den Haupt-Filerequester allokieren */
-
- if( UseAsl )
- {
- if(!(Asl_FileFileReq=(struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,
- ASL_FuncFlags,FILF_PATGAD|FILF_NEWIDCMP,
- TAG_DONE)))
- return(GetStr(MSG_INFO_GLOBAL_CANTALLOCFILEREQ));
- }
- else
- {
- if( !( FileFileReq = rtAllocRequestA( RT_FILEREQ, NULL )))
- return( GetStr( MSG_INFO_GLOBAL_CANTALLOCFILEREQ ));
- }
-
- return(0);
- }
-
- void FreeRequester(void)
- {
- if( UseAsl )
- {
- if( Asl_FileFileReq ) FreeAslRequest( Asl_FileFileReq );
- }
- else
- {
- if( FileFileReq ) rtFreeRequest( FileFileReq );
- }
- }
-
- void LocalizeAll( void )
- {
- LocalizeMenus();
- }
-
- static UBYTE *MyOpenLibrary(char *name, ULONG version, APTR *baseptr)
- {
- if(!(*baseptr = OpenLibrary(name, version)))
- {
- sprintf(errorbuffer,GetStr(MSG_INFO_GLOBAL_CANTOPENLIBRARY), name, version);
- return(errorbuffer);
- }
- else
- return(0);
- }
-
- UBYTE *OpenLibs(void)
- {
- char *errortext;
-
- LocaleBase = (struct LocaleBase *)OpenLibrary("locale.library", 38);
- if(errortext = MyOpenLibrary("dos.library", 37, (APTR *)&DOSBase)) return(errortext);
- if(errortext = MyOpenLibrary("intuition.library", 37, (APTR *)&IntuitionBase)) return(errortext);
- if(errortext = MyOpenLibrary("graphics.library", 37, (APTR *)&GfxBase)) return(errortext);
- if(errortext = MyOpenLibrary("icon.library", 37, (APTR *)&IconBase)) return(errortext);
- if(errortext = MyOpenLibrary("commodities.library", 37, (APTR *)&CxBase)) return(errortext);
- if(errortext = MyOpenLibrary("asl.library", 37, (APTR *)&AslBase)) return(errortext);
- if(errortext = MyOpenLibrary("rexxsyslib.library", 36, (APTR *)&RexxSysBase)) return(errortext);
- if(errortext = MyOpenLibrary("utility.library", 37, (APTR *)&UtilityBase)) return(errortext);
- if(errortext = MyOpenLibrary("gadtools.library", 37, (APTR *)&GadToolsBase)) return(errortext);
- if(errortext = MyOpenLibrary("diskfont.library", 35, (APTR *)&DiskfontBase)) return(errortext);
- if(errortext = MyOpenLibrary("workbench.library", 37, (APTR *)&WorkbenchBase)) return(errortext);
- if(errortext = MyOpenLibrary("iffparse.library", 37, (APTR *)&IFFParseBase)) return(errortext);
- if(errortext = MyOpenLibrary("keymap.library", 37, (APTR *)&KeymapBase)) return(errortext);
-
- ReqToolsBase = ( struct ReqToolsBase * )OpenLibrary( REQTOOLSNAME, 38);
-
- if( ReqToolsBase ) UseAsl = FALSE;
-
- /* XpkBase=OpenLibrary(XPKNAME,0);*/
-
- return(0);
- }
-
- void CloseAll(void)
- {
- long k;
-
- /* Display schließen */
-
- while(FALSE==CloseDisplay());
-
- if( SollPublicScreenName )
- FreeVec( SollPublicScreenName );
-
- if( TextLineBuffer ) FreeVec( TextLineBuffer );
- FreeTempBitMap();
-
- FreeRequester();
-
- while( !IsListEmpty( &OldFileList ))
- FreeNLNode( OldFileList.lh_Head );
-
- while( !IsListEmpty( &DisplayInhaltList ))
- FreeDI(( struct DisplayInhalt * )DisplayInhaltList.lh_Head );
-
- while( !IsListEmpty( &FileList ))
- FreeFD(( struct FileData * )FileList.lh_Head );
-
- /* Alle ARexxcommands freigeben */
-
- for(k=0;k<10;k++)
- if(arexxcommands[k])FreeVec(arexxcommands[k]);
-
- /* Windowstrings freigeben */
-
- if(arexxcommandshellwindow)FreeVec(arexxcommandshellwindow);
- if(arexxcommandwindow)FreeVec(arexxcommandwindow);
-
- #ifdef AREXX
- if(MyRexxHost)CloseDownARexxHost(MyRexxHost);
- #endif
- FreeSearchHistory();
-
- /* Windowport freigeben */
-
- MyRemoveSignal( 1L << WndPort->mp_SigBit );
- DeleteMsgPort( WndPort );
-
- /* Appport freigeben */
-
- MyRemoveSignal( 1L << AppPort->mp_SigBit );
- DeleteMsgPort( AppPort );
-
- /* ReplyPort freigeben */
-
- FreeReplyPort();
-
- SetTaskPri( FindTask( NULL ), oldtaskpri );
-
- if( LocaleBase )
- {
- CloseCatalog(Catalog);
- CloseLocale(Locale);
- }
- }
-
- void CloseLibs(void)
- {
- /* if(XpkBase) CloseLibrary(XpkBase);*/
-
- CloseLibrary((struct Library *)ReqToolsBase);
-
- CloseLibrary(CxBase);
- CloseLibrary(KeymapBase);
- CloseLibrary(UtilityBase);
- CloseLibrary((struct Library *)IntuitionBase);
- CloseLibrary((struct Library *)GfxBase);
- CloseLibrary(GadToolsBase);
- CloseLibrary(DiskfontBase);
- CloseLibrary(AslBase);
- CloseLibrary(RexxSysBase);
- CloseLibrary((struct Library *)IconBase);
- CloseLibrary(WorkbenchBase);
- CloseLibrary(IFFParseBase);
- CloseLibrary((struct Library *)DOSBase);
-
- CloseLibrary((struct Library *)LocaleBase);
- }
- /* Removed registration stuff - Pavel Fedin
- #define GHOEHE 16
- #define GBREITE 62
-
- void Gedenken( void )
- {
- struct Window *Wnd;
- struct TextAttr ta;
- struct TextFont *tf;
- APTR VisualInfo;
- struct Screen *Scr;
- int k;
-
- Scr = LockPubScreen( NULL );
-
- ta.ta_Name = GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name;
- ta.ta_YSize = GfxBase->DefaultFont->tf_YSize;
- ta.ta_Style = 0;
- ta.ta_Flags = 0;
-
- if( !( tf = OpenDiskFont( &ta )))
- {
- ta.ta_Name = "topaz.font";
- ta.ta_YSize = 8;
- tf = OpenDiskFont( &ta );
- }
-
- Wnd = OpenWindowTags( NULL,
- WA_Left, (Scr->Width - GBREITE * tf->tf_XSize - 8)/2,
- WA_Top, (Scr->Height - GHOEHE * tf->tf_YSize - 4)/2,
- // WA_Title, "FileX 2.0 Nerv Requester",
- WA_InnerWidth, GBREITE * tf->tf_XSize + 8,
- WA_InnerHeight,GHOEHE * tf->tf_YSize + 4,
- WA_Flags, WFLG_RMBTRAP | WFLG_BORDERLESS | WFLG_SMART_REFRESH | WFLG_ACTIVATE,
- WA_PubScreen, Scr,
- TAG_DONE );
-
- if( Wnd && tf )
- {
- SetRast( Wnd->RPort, 3 );
-
- if( VisualInfo = GetVisualInfo( Wnd->WScreen, TAG_DONE ))
- {
- DrawBevelBox( Wnd->RPort, Wnd->BorderLeft, Wnd->BorderTop, Wnd->Width - Wnd->BorderRight - Wnd->BorderLeft, Wnd->Height - Wnd->BorderTop - Wnd->BorderBottom, GT_VisualInfo, VisualInfo, TAG_DONE);
- FreeVisualInfo( VisualInfo );
- }
-
- if( tf )
- SetFont( Wnd->RPort, tf );
-
- SetAPen( Wnd->RPort, 1 );
- SetBPen( Wnd->RPort, 3 );
-
- for( k = 0; k < 14; k++ )
- {
- Move( Wnd->RPort, Wnd->BorderLeft + 4, Wnd->BorderTop + tf->tf_Baseline + tf->tf_YSize * (k+1) + 2);
- Text( Wnd->RPort, GetStr(MSG_INFO_GLOBAL_NERVREQUESTER) + k * GBREITE, GBREITE );
- }
-
- Delay( 200 );
-
- // Entweder 16 Sekunden oder 2 min warten :-)
-
- for( k = 0; k < 40; k++)
- {
- ActivateWindow( Wnd );
- WindowToFront( Wnd );
- ScreenToFront( Wnd->WScreen );
- Delay( 20 );
- }
- }
- else
- {
- Delay( 400 );
- }
-
- if( Scr ) UnlockPubScreen( NULL, Scr );
- if( Wnd ) CloseWindow( Wnd );
- if( tf ) CloseFont( tf );
- }*/
-